<?php
/**
 * Model和Template结合对象
 *
 * @version $Id: IModelAndTemplate.php 312 2008-04-23 16:29:38Z iwind $
 * @package util.mvc
 */
class IModelAndTemplate extends IAbstractViewScheme {
	private $model;
	private $template;
	
	/**
	 * 构造方法
	 *
	 * @param mixed $model 数据
	 * @param mixed $template 模板名或模板对象
	 * @param string $format 可选IMintConfig::HTML_FORMAT和IMintConfig::XML_FORMAT,从0.0.3起可以使用
	 */
	public function __construct($model, $template, $format = IMintConfig::HTML_FORMAT) {
		$this->model = $model;
		if (!is_object($template) || !($template instanceof IMintTemplate)) {
			$this->template = new IMintTemplate($template, $format);
		}
		else {
			$this->template = $template;
		}
	}
	
	/**
	 * 取得该对象中的数据
	 *
	 * @return mixed
	 */
	public function getModel() {
		return $this->model;
	}
	
	/**
	 * 取得该对象中的模板
	 *
	 * @return IMintTemplate
	 */
	public function getTemplate() {
		return $this->template;
	}
	
	/**
	 * 执行
	 *
	 */
	public function invoke() {
		$model = $this->getModel();
		if (is_object($model) && ($model instanceof IModel)) {
			foreach ($model->getObjectMap() as $name=>$object) {
				$this->template->setValue($name, $object);
			}
		}
		else {
			if (is_array($model) || is_object($model)) {
				foreach ($model as $key=>$value) {
					if (native::isValidVariableName($key)) {
						$this->template->setValue($key, $value);
					}
				}
			}
		}
		$this->template->p();
	}
	
	/**
	 * 添加键值对
	 *
	 * @param string $key 键
	 * @param string $value 值
	 * @since 0.1
	 */
	public function put($key, $value) {
		$this->template->setValue($key, $value);
	}
}

?>